package com.lmm.lcbusiness.lcbusiness.utils;

import android.content.Context;

import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;


/**
 * Created by gxm on 2016/12/2.
 * des  地图GPS 帮助类
 */

public class BDGPSUtils {

    public LocationClient mLocationClient = null;
    public BDAbstractLocationListener myListener = new MyLocationListener();
    GPSReturn gpsReturn;
    Context mcontext;

    public BDGPSUtils(GPSReturn gpsReturn, Context mcontex) {
        this.gpsReturn = gpsReturn;
        this.mcontext = mcontex;
        initBDGPS();
    }


    /**
     * 开始定位
     */
    public void startGPS() {
        mLocationClient.registerLocationListener(myListener);
        //注册监听函数
        mLocationClient.start();
    }

    /**
     * 停止定位
     */
    public void stopGPS() {
        mLocationClient.unRegisterLocationListener(myListener);
        mLocationClient.stop();
    }

    /**
     * 初始化
     */
    public void initBDGPS() {
        mLocationClient = new LocationClient(mcontext);
        //声明LocationClient类
        initLocation();
    }

    /**
     * 初始化定位
     * 可选，默认0，即仅定位一次，设置发起定位请求的间隔需要大于等于1000ms才是有效的
     */
    private void initLocation() {
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
        );
        //可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
        option.setCoorType("bd09ll");
        //可选，默认gcj02，设置返回的定位结果坐标系
        option.setScanSpan(10000);
        //可选，默认0，即仅定位一次，设置发起定位请求的间隔需要大于等于1000ms才是有效的
        option.setIsNeedAddress(true);
        //可选，设置是否需要地址信息，默认不需要
        option.setOpenGps(true);
        //可选，默认false,设置是否使用gps
        option.setLocationNotify(true);
        //可选，默认false，设置是否当GPS有效时按照1S/1次频率输出GPS结果
        option.setIsNeedLocationDescribe(true);
        //可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
        option.setIsNeedLocationPoiList(true);
        //可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
        option.setIgnoreKillProcess(false);
        //可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死
        option.SetIgnoreCacheException(false);
        //可选，默认false，设置是否收集CRASH信息，默认收集
        option.setEnableSimulateGps(false);
        //可选，默认false，设置是否需要过滤GPS仿真结果，默认需要
        mLocationClient.setLocOption(option);
    }


    /**
     * 重置LocationClientOption
     *
     * @param option
     */
    public void resetLocation(LocationClientOption option) {
        mLocationClient.setLocOption(option);
    }


    public class MyLocationListener extends BDAbstractLocationListener {
        @Override
        public void onReceiveLocation(BDLocation location) {
            if (null != location && location.getLocType() != BDLocation.TypeServerError) {
                gpsReturn.retrunGPSInfo(location);
            }
        }
    }
}
